
# @target:  hello
# @input: files main.o a.o
# @cmd: gcc -o target_name（目标文件，或者PHONY） input_files（依赖目标）
# 执行顺序是  main.o -> a.o -> hello 
# 变量 
#使用全局变量 函数 不同目录 的方法
 
# target : input1(依赖1) input2(依赖2)  

# $@	表示目标

#  $^ 表示所有的依赖

#  $< 表示第一个依赖

# := 即时赋值

# ?= 延时赋值

# += 附加
BUILD_DIR = build
 

 
#和下面等同
C_SRC=$(wildcard src/*.c) 
 
#增加BUILD_DIR 文件夹前缀
C_OBJ =$(addprefix $(BUILD_DIR)/, $(C_SRC:.c=.o))
 
vpath %.c $(sort $(dir $(C_SRC))) 
  
INC+=-Iinc

TARGET = hello 

.PHONY: all clean

# # 依赖创建目录和编译 
all: $(BUILD_DIR)/$(TARGET)

# .o -> elf 文件
$(BUILD_DIR)/$(TARGET): $(C_OBJ)	 
	gcc -o $@ $(C_OBJ)

#all .c -> .o
$(BUILD_DIR)/%.o:%.c
	mkdir -p $(@D)
	echo $@ $< 
	gcc -c $< $(INC) -o $@
 
clean : 
	rm -rf $(BUILD_DIR) 

test:
	echo $(C_OBJ)
	 